/*IO = 等 + 拷贝
    select: 只负责进行等， 一次可以等待多个文件描述符。像钓鱼时可以拿多个鱼竿的人*/

/*int select(int nfds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, struct timeval* timeout)*/
/*struct timeval
{
    time_t tv_sec;          /* 时间戳：seconds */ 
    suseconds_t tv_usec;    // 时间戳： 微妙mircrosseconds}*/
// 1、第一个参数：将来select等待的多个文件描述符当中文件描述符最大的fd + 1。 max(fd) +1
// 返回值：>0: 有n个fd就绪了  ==0:超时(没有错误，也没有文件描述符就绪)  <0:等待出错
// 2、最后一个参数：给select设置等待方式。struct timeval timeout = {5, 0};代表select每隔5s,timeout一次。5s以内，阻塞式等待。
// 5s期间，如果没有任何一个文件描述符就绪了，select直接返回。然后再重新进入，在设置5s的时候，重复刚刚的动作，如果在等待的5s期间，
// 有文件描述符就绪，立即返回。{0， 0}:这就是非阻塞等待。立马返回   NULL：阻塞等待。
// 也是输入输出型参数。比如我们设置的是{5,0},刚过去2s，就有文件描述符就绪了。此时timeout参数就会变成{3, 0},表示超时时间还有3s。 
// 3、fd_set是操作系统提供的数据类型。是位图。在很多文件描述符中，有些文件描述符我们只关心能否读取数据，有些则是关心能否写数据。
// 目前关心fd上面的事件：1、读 2、写  3、异常。如果读文件描述符就绪，可以通过该文件描述符读取数据，不会阻塞。
// 例如readfds: 

#include <iostream>
#include <sys/select.h>

int main()
{
    return 0;
}